<?php

namespace Unl\HomologacionBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;


/**
* @ORM\Entity(repositoryClass="Unl\HomologacionBundle\Repository\MallaCurricularRepository")
* @Assert\Callback(methods={"esAnioValido"})
*/
class MallaCurricular
{
    /**
    * @ORM\Id
    * @ORM\Column(type="bigint")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

     /**
    * @ORM\Column(type="integer")
    * @Assert\NotBlank(message = "El campo año no puede estar en blanco.")
    * @Assert\Type(type="integer", message="El valor {{ value }} no es un {{ type }} válido.")
    * @Assert\MinLength(limit = 4, message = "El campo anio debe tener {{ limit }} digitos." )
    * @Assert\MaxLength(limit = 4, message = "El campo anio  debe tener {{ limit }} digitos." )

    */
    protected $anio;

    /**
    * @ORM\Column(type="integer")
    * @Assert\NotBlank(message = "El campo duracion no puede estar en blanco.")
    * @Assert\Type(type="integer", message="El valor {{ value }} no es un {{ type }} válido.")
    * @Assert\MinLength(limit = 2, message = "El campo duracion debe tener {{ limit }} digitos." )
    * @Assert\MaxLength(limit = 2, message = "El campo duracion debe tener {{ limit }} digitos." )
    */
    protected $duracion;

    /**
    * @ORM\ManyToOne(targetEntity="Carrera", inversedBy="mallasCurriculares")
    * @ORM\JoinColumn(name="carrera_id", referencedColumnName="id")
    */
    protected $carrera;

    /**
    * @ORM\ManyToOne(targetEntity="UnidadTiempo", inversedBy="mallasCurriculares")
    * @ORM\JoinColumn(name="unidadTiempo_id", referencedColumnName="id")
    */
    protected $unidadTiempo;

  
    /**
    * @ORM\ManyToOne(targetEntity="Universidad", inversedBy="mallasCurricular")
    * @ORM\JoinColumn(name="universidad_id", referencedColumnName="id")
    */
    protected $universidad;
    
    
     /**
    * @ORM\OneToMany(targetEntity="Modulo", cascade={"all"}, mappedBy="mallaCurricular")
    */
    protected $modulos;
   
    
    
    /**
     * Get id
     *
     * @return bigint 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set anio
     *
     * @param integer $anio
     */
    public function setAnio($anio)
    {
        $this->anio = $anio;
    }

    /**
     * Get anio
     *
     * @return integer 
     */
    public function getAnio()
    {
        return $this->anio;
    }

    /**
     * Set duracion
     *
     * @param integer $duracion
     */
    public function setDuracion($duracion)
    {
        $this->duracion = $duracion;
    }

    /**
     * Get duracion
     *
     * @return integer 
     */
    public function getDuracion()
    {
        return $this->duracion;
    }

    /**
     * Set carrera
     *
     * @param Unl\HomologacionBundle\Entity\Carrera $carrera
     */
    public function setCarrera(\Unl\HomologacionBundle\Entity\Carrera $carrera)
    {
        $this->carrera = $carrera;
    }

    /**
     * Get carrera
     *
     * @return Unl\HomologacionBundle\Entity\Carrera 
     */
    public function getCarrera()
    {
        return $this->carrera;
    }

    /**
     * Set unidadTiempo
     *
     * @param Unl\HomologacionBundle\Entity\UnidadTiempo $unidadTiempo
     */
    public function setUnidadTiempo(\Unl\HomologacionBundle\Entity\UnidadTiempo $unidadTiempo)
    {
        $this->unidadTiempo = $unidadTiempo;
    }

    /**
     * Get unidadTiempo
     *
     * @return Unl\HomologacionBundle\Entity\UnidadTiempo 
     */
    public function getUnidadTiempo()
    {
        return $this->unidadTiempo;
    }
    
     public function __toString()
    {
        return $this->anio.' '.$this->carrera;
    }


    /**
     * Set universidad
     *
     * @param Unl\HomologacionBundle\Entity\Universidad $universidad
     */
    public function setUniversidad($universidad)
    {
        $this->universidad = $universidad;
    }

    /**
     * Get universidad
     *
     * @return Unl\HomologacionBundle\Entity\Universidad 
     */
    public function getUniversidad()
    {
        return $this->universidad;
    }
    public function __construct()
    {
        $this->modulos = new \Doctrine\Common\Collections\ArrayCollection();
    }
    
    /**
     * Add modulos
     *
     * @param Unl\HomologacionBundle\Entity\Modulo $modulos
     */
    public function addModulo(\Unl\HomologacionBundle\Entity\Modulo $modulo)
    {
        $this->modulos->add($modulo);
        $modulo->setMallaCurricular($this);
      
    }
    
    public function setModulos($modulos)
    {
        foreach ($modulos as $modulo) {
            $modulo->setMallaCurricular($this);
        }
        $this->modulos = $modulos;
    }

    /**
     * Get modulos
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getModulos()
    {
        return $this->modulos;
    }
    
    public function esAnioValido(ExecutionContext $context){
         if (empty($this->anio)) {
           $context->addViolation('Año no puede ser blanco', array(), null);
        }
        return true;
    }
}